#ifndef _LINUX_CRYPTO_H_434353252
#define _LINUX_CRYPTO_H_434353252 1

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

#define u8		unsigned char
#define u16		unsigned short
#define u32		unsigned int
#ifdef _WIN32
#define u64		unsigned __int64
#else
#define u64		unsigned long long
#endif

/* DES interface */
void des_setkey (u32 *expkey,	/*expkey[32]*/
				const u8 *key	/*key[8]*/);
void des_encrypt(u32 *expkey,	/*expkey[32]*/
				 u8 *dst,		/*des[8]*/
				 const u8 *src	/*src[8]*/);
void des_decrypt(u32 *expkey,	/*expkey[32]*/
				 u8 *dst,		/*des[8]*/
				 const u8 *src	/*src[8]*/);

// 3DES interface
void des3_setkey (u32 *expkey,	/*expkey[96]*/
				const u8 *key	/*key[24]*/);
void des3_encrypt (u32 *expkey,	/*expkey[96]*/
				u8 *dst,		/*des[8]*/
				const u8 *src	/*src[8]*/);
void des3_decrypt (u32 *expkey,	/*expkey[96]*/
				u8 *dst,		/*des[8]*/
				const u8 *src	/*src[8]*/);

// MD5
typedef struct { char a[90]; } MD5_CTX;
void md5_init(MD5_CTX *ctx);
void md5_update(MD5_CTX *ctx, const u8 *data, unsigned int len);
void md5_final(MD5_CTX *ctx, u8 *out	/*out[16]*/);

#ifdef __cplusplus
}
#endif // __cplusplus	

#endif	/* _LINUX_CRYPTO_H_434353252 */
